counter === 1 || $gridWidth && $this->counter !== 0 && ($this->counter - 1) % $gridWidth === 0; } /** * Is the current element the last one? */ public function isLast(?int $gridWidth = null) : bool { return !$this->hasNext() || $gridWidth && $this->counter % $gridWidth === 0; } /** * Is the iterator empty? */ public function isEmpty() : bool { return $this->counter === 0; } /** * Is the counter odd? */ public function isOdd() : bool { return $this->counter % 2 === 1; } /** * Is the counter even? */ public function isEven() : bool { return $this->counter % 2 === 0; } /** * Returns the counter. */ public function getCounter() : int { return $this->counter; } /** * Returns the count of elements. */ public function count() : int { $inner = $this->getInnerIterator(); if ($inner instanceof \Countable) { return $inner->count(); } else { throw new Nette\NotSupportedException('Iterator is not countable.'); } } /** * Forwards to the next element. */ public function next() : void { parent::next(); if (parent::valid()) { $this->counter++; } } /** * Rewinds the Iterator. */ public function rewind() : void { parent::rewind(); $this->counter = parent::valid() ? 1 : 0; } /** * Returns the next key. * @return mixed */ public function getNextKey() { return $this->getInnerIterator()->key(); } /** * Returns the next element. * @return mixed */ public function getNextValue() { return $this->getInnerIterator()->current(); } }